package cn.com.dcsgo.feign;

import cn.com.dcsgo.domain.Prod;
import cn.com.dcsgo.dto.SkuDTO;
import cn.com.dcsgo.dto.StockUpdateDTO;
import cn.com.dcsgo.feign.fallback.ProdFeignClientFallback;
import cn.com.dcsgo.model.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Set;

/**
 * 商品 FeignClient
 *
 * @author Dcsgo
 * @since 2025/10/28 18:23
 */
@FeignClient(value = "product-service", fallback = ProdFeignClientFallback.class)
public interface ProdFeignClient {
    /**
     * 获取商品基本信息
     *
     * @param prodId 商品ID
     * @return Result->Prod
     */
    @GetMapping("prod/prod/{prodId}")
    Result<Prod> getBasicProdInfo(@PathVariable("prodId") Long prodId);

    /**
     * 获取商品基本信息
     *
     * @param prodIds 商品ID列表
     * @return List->Prod
     */
    @GetMapping("prod/prod/list")
    List<Prod> getBasicProdInfoByIds(@RequestParam("prodId") Set<Long> prodIds);

    /**
     * 获取Sku列表
     *
     * @param skuIds skuID列表
     * @return Sku列表
     */
    @GetMapping("rpc/prod/sku/list/ids")
    List<SkuDTO> getSkuDTOListBySkuIds(@RequestParam("skuIds") Set<Long> skuIds);

    /**
     * 更新商品库存
     *
     * @param stockUpdateDTO 更新库存请求参数
     * @return true-更新成功，false-更新失败
     */
    @PutMapping("rpc/prod/stock")
    boolean updateStock(@RequestBody StockUpdateDTO stockUpdateDTO);
}
